/**
题目：删除有序数组中的重复项 II

给你一个有序数组 nums ，请你 原地 删除重复出现的元素，使得出现次数超过两次的元素只出现两次 ，返回删除后数组的新长度。

不要使用额外的数组空间，你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

解答：快慢指针
*/
struct Solution {}

impl Solution {
  pub fn remove_duplicates(nums: &mut Vec<i32>) -> i32 {
    if nums.len() <= 2 {
      return nums.len() as i32;
    }
    
    let mut slow = 2;
    for fast in 2..nums.len() {
      if nums[slow - 2] != nums[fast] {
        nums[slow] = nums[fast];
        slow += 1;
      }
    }
    slow as i32
  }
}

pub fn main() {
  let mut nums = vec![0,0,1,1,1,1,2,3,3];
  let count = Solution::remove_duplicates(&mut nums);
  println!("count = {} nums = {:?}", count, nums);
}